class Solution {
    public int rob(int[] nums) {
        int ans=0;
        int n=nums.length;
        if(n==1){
            return nums[0];
        }
        int[] f=new int[n];
        int[] g=new int[n];

        //选第一家->最后一家不能选
        f[0]=nums[0];
        g[1]=nums[0];
        if(n==2){
            ans=nums[1];
        }else{
            for (int i = 2; i < n - 1; i++) {
                f[i]=g[i-1]+nums[i];
                g[i]=Math.max(f[i-1],g[i-1]);
            }
            ans=Math.max(f[n-2],g[n-2]);
        }

        //不选第一家->最后一家可选可不选
        f=new int[n];
        g=new int[n];
        f[1]=nums[1];
        for (int i = 2; i < n; i++) {
            f[i]=g[i-1]+nums[i];
            g[i]=Math.max(f[i-1],g[i-1]);
        }
        ans=Math.max(Math.max(f[n-1],g[n-1]),ans);
        return ans;
    }
}